#include <iostream>
#include <bits/stdc++.h>
#include <queue>
 
using namespace std;

// 楼层
struct floor
{
    int n; // 第n层楼
    int k; // 上下k层
    bool visited; // 是否访问过

    int step; // 被第几次按钮
};

int main(int argc, char const *argv[])
{
    int N; // N层楼
    int A, B; // 从A层到B层
    cin >> N >> A >> B;

    // 具有N个楼层的电梯
    struct floor lift[N+1]; 
    bzero(lift, sizeof(struct floor)*(N+1));

    // 每个楼层上下层数的K
    for(int i=1; i<=N; i++)
    {
        lift[i].n = i;
        cin >> lift[i].k;
    }

    queue<struct floor> q;
    q.push(lift[A]);

    int m;
    while(!q.empty())
    {
        struct floor cur = q.front();
        q.pop();

        // 到达目的楼层
        if(cur.n == B)
        {
            cout << cur.step << endl;
            return 0;
        }

        // 若第n+k层未被访问过，且楼层合理，则上楼
        m = cur.n + cur.k;
        lift[m].step = cur.step+1;
        if(m<=N && !lift[m].visited)
        {
            q.push(lift[m]);
            lift[m].visited = true;
        }

        // 若第n-k层未被访问过，且楼层合理，则下楼
        m = cur.n - cur.k;
        lift[m].step = cur.step+1;
        if(m>=1 && !lift[m].visited)
        {
            q.push(lift[m]);
            lift[m].visited = true;
        }
    }

    // 无法到达目的楼层
    cout << -1 << endl;
    return 0;
}